#ifndef __TYPEDEF_H__
#define __TYPEDEF_H__

#include <string>

using namespace std;

/* tipo de funciones para validar un tipo de atributo (string, caracter, entero, entero positivo, etc) */
typedef bool (*VAL_FUNC)(void*);

/**
 * Clase que permite instanciar una definicion de tipo valido para un atributo definido por una instancia de AttDef
 */
class TypeDef{
	string* nombre;
	VAL_FUNC valFunc;

public:

	/**
	 * Inicializa la definicion de tipo
	 */
	TypeDef(const string& nombre, VAL_FUNC valFunc){
		this->nombre = new string(nombre);
		this->valFunc = valFunc;
	}

	/**
	 * Devuelve el nombre del tipo
	 */
	string getNombre(){
		return *this->nombre;
	}

	/**
	 * Devuelve verdadero o false de acuerdo a si el valor recibido corresponde a este tipo o no
	 */
	bool esValorValido(void* valor){
		return valor != NULL && valFunc(valor);
	}

	/**
	 * Libera la memoria usada para alojar el nombre del tipo
	 */
	~TypeDef(){
		delete this->nombre;
	}
};

#endif